﻿#ifndef __HTTP_CURL_H__  
#define __HTTP_CURL_H__  
#include "stdafx.h"
#include <string>  
#include <map>
#include <functional>
#include "curl/curl.h"

class CHttpClient
{
public:
	static CHttpClient* GetInstance();
	~CHttpClient(void);

public:

	/**
	* @brief HTTP POST请求
	* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
	* @param strPost 输入参数,使用如下格式para1=val1&para2=val2&…
	* @param strResponse 输出参数,返回的内容
	* @return 返回是否Post成功
	*/
	int Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse,std::string token="");

	/**
	* @brief HTTP GET请求
	* @param strUrl 输入参数,请求的Url地址,如:http://www.baidu.com
	* @param strResponse 输出参数,返回的内容
	* @return 返回是否Post成功
	*/
	int Get(const std::string & strUrl, std::string & strResponse);

	/**
	* @brief HTTPS POST请求,无证书版本
	* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
	* @param strPost 输入参数,使用如下格式para1=val1&para2=val2&…
	* @param strResponse 输出参数,返回的内容
	* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
	* @return 返回是否Post成功
	*/
	int Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath = NULL);

	/**
	* @brief HTTPS GET请求,无证书版本
	* @param strUrl 输入参数,请求的Url地址,如:https://www.alipay.com
	* @param strResponse 输出参数,返回的内容
	* @param pCaPath 输入参数,为CA证书的路径.如果输入为NULL,则不验证服务器端证书的有效性.
	* @return 返回是否Post成功
	*/
	int Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath = NULL);
	static std::string UTF8_To_string(const std::string & str);
	static std::string string_To_UTF8(const std::string & str);
	//下载文件
	std::string DownloadFile(const std::string &urlPath, const std::string localpath, long timeout);
	std::string UploadFile(const std::string &urlPath, const std::string fileName, std::string &strResponse);
	int test();

private:
	CHttpClient(void);
	bool m_bDebug;
	std::string url_head;
	std::string url_file_head;
};

#endif  